PDJ-Microsoft DirectX 8 Developer FAQArtigo: Microsoft DirectX 8 Developer 
      FAQ
      Por:Microsoft Corporation  
      Pgina Principal


      Microsoft DirectX 8 Developer FAQ
      Por Microsoft Corporation  

Microsoft Corporation
Fevereiro de  2001
Resumo: Este artigo fornece respostas s mais freqentes questes  a respeito do 
 Microsoft DirectX, verso 8.0, incluindo as sees de Direct3D, DirectSound, e 
DirectPlay. (10 pginas impressas)
Contedos
Assuntos Gerais sobre o Desenvolvimento do  DirectX 
Direct3D
   Questes Gerais
   Processamento Geomtrico (Vrtices)
   Sintonizao de performance
  Biblioteca Utilitria do Direct3DX 
DirectSound
DirectPlay
Assuntos Gerais no desenvolvimento do  DirectX 
Porque eu  recebo tantas mensagens de erros quando eu tento compilar exemplos?
Voc provavelmente no tem  o caminho "include" posicionado corretamente. Muitos 
compiladores, incluindo o Microsoft Visual C++, incluem uma verso mais 
recente do SDK, assim o compilador ir procurar pelos arquivos de cabealhos nos 
primeiros diretrios. Para solucionar este problema, tenha certeza de  caminho 
"include" e os caminhos das bibliotecas  esto posicionados para procurar o no 
caminho dos diretrios include e da biblioteca primeiro. Veja tambm o arquivo 
dxreadme.txt no SDK. Se voc instalar o  DirectX SDK e est usando o Visual C++, 
o instalador pode  ajustar os caminhos include opcionalmente para voc. 
Eu recebo erros de links em smbolos mltiplos ou ausentes para identificadores 
globais nicos (Guids), o que eu fao? 
Os vrios GUIDs que voc usa devem ser definidos uma vez e somente uma vez. A 
definio para  o GUID ser inserida se voc difinir (#define INITGUID) antes de 
incluir os arquivos iniciais do  DirectX. Portanto, voc deve ter certeza que 
isto s ocorre para uma unidade de compilao. Uma alternativa para este mtodo 
 linkar com a biblioteca dxguid.lib, que contm definies para todos os GUIDs 
do DirectX. Se voc usar este mtodo (o qual  recomendado), ento voc nunca 
deve  #definir o smbolo INITGUID .
Posso lanar um ponteiro para uma  interface do DirectX para um  uma verso 
anterior? 
No. As interfaces do DirectX so interfaces COM. Isto significa que no h 
exigncia para interfaces numeradas mais altas que sejam derivadas de numeradas 
menores correspondentes. Portanto, a nica maneira segura de obter diferentes 
interfaces para um objeto DirectX  usar o mtodo  QueryInterface de interface. 
Este mtodo  parte da interface padro IUnknown , do qual todas as interfaces 
devem derivar. 
Posso misturar o uso dos componentes do DirectX 8 e DirectX 7 ou componentes 
anteriores dentro da mesma aplicao?
Voc pode misturar livremente componentes diferentes de diferentes verses; por 
exemplo, voc pode usar o DirectPlay 8 com o DirectDraw 7 na mesma aplicao. 
Contudo, voc geralmente no pode misturar diferentes verses do mesmo 
componente dentro da mesma aplicao; por exemplo, voc no pode misturar o 
DirectDraw 7com o Direct3D 8 (j que estes so efetivamente os mesmos 
componentes em que o DirectDraw havia sido mesclado dentro do Direct3D no 
DirectX 8).
O que significam os valores devolvidos dos mtodos Release ou AddRef?
O valor return ser a conta de referncia atual do objeto. Contudo, os estados 
de especificao COM que voc no deve contar nisto e o valor s est disponvel 
para propsitos de debugging.  Os valores que voc observa podem ser inesperados 
j que vrios outros objetos do sistema podem estar englobando referncias para 
os objetos do  DirectX  que voc cria. Por esta razo, voc no deve escrever o 
cdigo que repetidamente chama o Release at que a contagem de referncia seja 
0, conforme o objeto possa ento ser liberado mesmo se um outro componente possa 
estar referindo-se a ele. 
Importa em qual ordem eu libere as interfaces do  DirectX?
No deve importar porque  as interfaces COM so  referncias contadas. Contudo, 
h alguns bugs conhecido com a liberao da ordem das interfaces em algumas 
verses  do  DirectX. Para segurana,  aconselhado que voc libere as 
interfaces na ordem de criao inversa quando possvel. 
O que  um ponteiro  inteligente, e devo us-los?
Um ponteiro inteligente  uma classe template  C++  projetada para encasular a 
funcionalidade de um ponteiro. Em particular, h as classes de ponteiros padro  
para encasular  os ponteiros da interface COM. Estes ponteiros automaticamente 
realizam QueryInterface ao invs de um  cast, e manusear o  AddRef e Release 
para voc. Se voc deve us-los   s uma questo de gosto. Se o seu cdigo 
contem muitas cpias de ponteiros interface, com mltiplos AddRefs e Releases,  
ento os ponteiros inteligents podem provavelmente fazer o seu cdigo mais 
organizado e com menos propenso a erros. Por outro lado, voc pode fazer sem 
eles. O Visual C++ inclui um ponteiro inteligente padro  do Microsoft COM, 
definido no arquivo cabealho "comdef.h"  (procure com_ptr_t na ajuda).
Tenho problemas  com bugs no meu aplicativo do DirectX, algumas dicas?
O problema mais comum com  bugs nas aplicaes DirectX   tentar  depurar 
enquanto a superfcie  do  DirectDraw estiver trancada. Esta situao pode 
causar um  "Win16 Lock" nos sistemas do  Microsoft Windows 9x , que previne o  
a janela  do debugger de pintar. Especificar  o "flag" D3DLOCK_NOSYSLOCK quando  
trancar a superfcie  pode geralmente eliminar isto. O  Windows 2000 no sofre 
deste problema. Quando desenvolver uma aplicao,  til estar funcionando  com 
a verso sem problemas do runtime do  DirectX (selecionado quando voc instalar 
o SDK), que realiza algumas validaes de parmetros e mensagens de sada teis 
para a sada do debugger. 
Qual  maneira correta de conferir os cdigos de retorno? 
Use os macros SUCCEEDED e FAILED . Os mtodos DirectX podem retornar sucessos 
mltiplos e cdigos falhos, assim um simples  "==D3D_OK" ou um teste similar  
nem sempre  ser o suficiente.
O que aconteceu ao DirectDraw?
Muito da funcionalidade do  DirectDraw foi submetida as novas interfaces do  
Direct3D8 . Os desenvolvedores que  trabalham puramente em aplicaes 2D podem 
desejar continuar usando as velhas interfaces do velho  DirectX 7 . Os 
desenvolvedores que trabalham em aplicaes 3D com alguns elementos em 2D so 
encorajados a usarem as alternativas do  Direct3D ( pontos de sprites e texturas 
billboar, por exemplo) ento isto resultar em uma performance melhorada e 
flexibilidade. 
Como eu invalido ALT+TAB  e outras tarefas de troca? 
Voc no invalida  de verdade. 
Existe um livro recomendado explicando COM?
Inside COM de Dale Rogerson, publicado pela Microsoft Press,  uma excelente  
introduo para  COM. Para um livro mais detalhado em COM, o livro  Essential 
COM pela Don Box, publicado pela Longman,  tambm  altamente recomendado. 
Quie livros existem sobre programao geral  em Windows?
Muitos, contudo aqueles que so muito recomendados so: 
  Programming Windows de Charles Petzold (Microsoft Press) 
  Advanced Windows de Jeffrey Richter (Microsoft Press) 
Direct3D
Questes Gerais
Onde posso encontrar informao sobre tcnicas grficas em 3D?
O livro bsico sobre o assunto   Computer Graphics: Principles and Practice de 
Foley, Van Dam et al.,  e  uma fonte valiosa para qualquer pessoa  que espera 
entender os fundamentos matemticos de geometria, rasterizao e tcnicas de 
iluminao. As FAQ para o grupo de usurios da net comp.graphics.algorithms  
tambm contem material til.
O Direct3D tenta igualar a funcionalidade no fornecida pelo hardware?
 Depende. O  Direct3D  tem um software de vrtice completamente caracterizado 
processando  um pipeline ( incluindo suporte para sombras de vrtices 
customizadas) Contudo, nenhum suporte  fornecido para operaes de nvel pixel; 
as aplicaes devem conferir   os bits  caps e usam o ValidateDevice API para 
determinar suporte. 
Existe um software rasterizer includo com o Direct3D?
No. O Direct3D agora suporta os plug-ins de softwares rasterizer. Contudo, no 
existe atualmente um software rasterizer fornecido  por default.
O cdigo  geomtrico  do  Direct3D utiliza instrues 3DNow! e/ou Pentium III 
SIMD ?
Sim. O pipeline do  Direct3D geomtrico tem vrios caminhos de cdigo 
diferentes, dependendo do tipo de processador , e utilizar   as operaes 
especiais  de ponto-flutuante fornecidos pelas instrues 3DNow! ou Pentium III 
SIMD  onde estes esto disponveis. Isto inclui o processamento de shaders de 
vrtices customizadas. 
Como prevenir pixels transparentes de serem escritos no buffer-z? 
Voc pode filtrar para fora os pixels com um valor alfa acima ou abaixo de um 
dado  limiar. Voc controla este comportamento ao usar os estados renderizados  
ALPHATESTENABLE, ALPHAREF, e ALPHAFUNC.
O que  um stencil buffer ?
Um stencil buffer  um buffer adicional de informao por pixel, muito parecido 
com um z-buffer. Na verdade, ele reside em alguns bits de um z-buffer. Formatos 
de buffer stencil/z comuns so 15-bit e 1-bit stencil, ou 24-bit z e 8-bit 
stencil.  possvel  realizar operaes aritmticas simples nos  contedos do 
stencil  buffer em uma base  por pixel como polgonos so  renderizados. Por 
exemplo, o stencil buffer pode ser incrementado ou decrementado, ou o pixel pode 
ser rejeitado se o valor stencil falhar em um simples teste de comparao. Isto 
 til para efeitos que envolvem   marcar uma regio do quadro do buffer, e 
depois realizar um renderizao somente  na regio marcada ( ou desmarcada). 
Bons exemplos so efeitos volumtricos como volumes shaders. 
Como usar um stencil buffer para renderizar volumes de sombra?
A chave para isto, e outros efeitos volumtricos  de stencil buffer,  a 
interao entre o stencil buffer e o z-buffer. Uma cena com um volume de sombra 
 renderizado em trs estgios. Primeiro. A cena sem a sombra  renderizada como 
usual, usando o z-buffer. Depois, a sombra  marcada no stencil buffer como a 
seguir. As faces fronatais do volume de sombra so desenhadas usando polgonos  
invisveis, com o teste z habilitado mas os escritos z desabilitados, e o 
stencil buffer melhorado a cada pixel passando pelo teste z. As faces de trs do 
volume de sombra so renderizadas similarmente, mas decrementando o valor 
stencil  ao invs.
Agora, considere um nico pixel. Pressuponha que a cmera no  est no volume da 
sombra, existem quatro possibilidades para  o ponto correspondente na cena.  Se 
ao raio da cmera para a ponta no intercepta o volume da sombra, ento  nenhum  
polgono de sombra ter sido desenhado e o stencil buffer  ainda zero . Por 
outro lado, se o ponto fica na frente do volume da sombra, os polgonos de 
sombra sero z-buffered e o stencil novamente permanecer inalterado. Se os 
pontos ficam atrs do volume de sombra ento o mesmo nmero das faces da frente 
da sombra assim como as faces de trs tero sido renderizadas e o stencil ser 
zero, tendo sido incrementado tantas vezes quanto  decrementado. 
A possibilidade final  que o ponto fique dentro do volume da sombra. Neste caso 
a face de trs do volume da sombra ser z-buffered para fora, mas no na face da 
frente, assim o stencil buffer ser de valor no-zero. O resultado  pores do 
quadro buffer permanecendo  na sombra tem um valor stencil no-zero. Finalmente, 
para na verdade renderizar a sombra, a cena toda   lavada sobre o polgono 
dobrado alfa e posicionado para efeito somente sobre os pixels com valor stencil 
no zero. Um exemplo desta tcnica pode ser visto no  exemplo "Shadow Volume" 
que vem com o  DirectX SDK.
Quais so as regras de alinhamento texel ? Como consigo um mapeamento um por um?
Isto  explicado completamente na documentao do  DirectX 8(abaixo do artigo 
intitulado  Directly Mapping Texels to Pixels). Contudo,  o resumo  real  que 
voc deve direcionar as coordenadas da sua tela para  0.5 de um pixel  a fim de 
alinhar apropriadamente com texels. A maioria das placas age de acordo com as 
regras de alinhamento texel, contudo existem algumas placas ou drivers que no 
aceitam. Para manusear nestes casos, o melhor conselho  contatar o  vendedor de 
hardware em questo e pedir drivers atualizados ou seus acessrios sugeridos. 
Qual  o propsito da flag  D3DCREATE_PUREDEVICE ?
Se a flag D3DCREATE_PUREDEVICE for especificada durante a criao do 
dispositivo, o Direct3D criar um dispositivo puro. Isto desabilita o uso da 
famlia  de mtodos  Get*e o processamento dos vrtices de fora serem hardware 
somente. Isto permite que o tempo de funcionamento do Direct3D faa certas 
otimizaes que proporciona o melhor caminho possvel sem ter que rastrear tanto 
pelo estado interno. Em outras palavras, voc pode ver uma performance de 
vantagem usando  PUREDEVICE, ao custo de alguma convenincia. 
Como usar uma paleta de cores?
O DirectX 8 no suporta a paleta de cores. Voc deve usar alfa mistura/teste ao 
invs, que  em geral uma tcnica mais flexvel que no sofre de alguns 
problemas associados com a paleta de cores. 
Como eu enumero os dispositivos display em um sistema de multi-monitor?
Em comum com outra funcionalidade de enumerao, isto modificou de ser chamado 
de volta baseado em uma simples interao pela aplicao  usando mtodos da 
interface  IDirect3D8 . Chame GetAdapterCount para determinar o nmero de 
adaptadores do display no sistema. Chame GetAdapterMonitor para determinar qual 
monitor fsico que um adaptador st conectado ( este mtodo retorna um 
HMONITOR, que voc pode ento usar no Win32 API GetMonitorInfo para determinar a 
informao a respeito do monitor fsico). Determinando as caractersticas de um 
adaptador de display  em particular ou criar um dispositivo  Direct3D sobre 
aquele adaptador  to simples quanto passar o nmero do adaptador apropriado no 
lugar do  D3DADAPTER_DEFAULT quando chamar o  GetDeviceCaps, CreateDevice, ou 
outros mtodos. 
Processamento Geomtrico (Vrtice) 
O que aconteceu aos velhos tipos de vrtices como o D3DVERTEX?
Os tipos de vrtices pr-enlatados no so mais apoiados explicitamente. O 
sistema stream de vrtices mltiplos permite uma montagem mais flexvel de dados 
de vrtices. Se voc quiser usar um dos formatos clssicos de vrtices, voc 
pode construir um cdigo FVF apropriado. 
Streams de vrtices me confundem, como eles funcionam?
O Direct3D agrupa cada vrtice que  alimentado  dentro da poro de 
processamento do pipeline de um ou mais streams de vrtices. Tendo somente um 
stream de vrtice corresponde ao velho modelo do  pre-DirectX 8 , no qual os 
vrtices vem de uma nica fonte. Com o  DirectX 8, diferentes componentes de 
vrtice podem vir de diferentes fontes; por exemplo, um buffer de vrtice 
poderia englobar posies, enquanto um segundo englobaria valores de cores e 
coordenadas de textura. 
O que  um vrtice shader?
Um vrtice shader  um procedimento para processar um nico vrtice.  definido 
usando uma montagem simples como linguagem  que  montado pela biblioteca 
utilitria do  D3DX dentro de um  stream modelo que  o  Direct3D aceita. O 
vrtice shader pega como entrada um nico vrtice, e um conjunto de valores 
constantes, e  sadas uma posio de vrtice ( em  clip-espao) e opcionalmente 
um conjunto de cores e coordenadas de texturas que so usadas em rastreamento. 
Observe que quando voc tem uma vrtice shader customizada, os componentes da 
vrtice no mais tem quaisquer semntica aplicada a elas pelo  Direct3D e as 
vrtices so simplesmente  dados arbitrrios que   interpretado pela vrtice 
shader que voc criar. 
Uma vrtice shader realiza diviso em perspectiva ou  clipping?
No. A vrtice shader  informa uma coordenada homognea no clip-espao para a 
posio da vrtice transformada. A perspectiva de diviso e clipping  realizada 
automaticamente ps-shader. 
Posso gerar geometria com uma vrtice shader?
Uma vrtice shader no pode criar ou destruir vrtices; ela opera sobre uma 
nica vrtice de cada vez, tomando uma vrtice no processada como entrada e 
libera uma nica vrtice processada. Pode, entretanto, ser usado para manipular 
a geometria existente( aplicar deformaes, ou realizando operaes de  
revestimento) mas no podem  gerar uma nova geometria por si s de verdade. 
Posso aplicar uma vrtice shader customizada aos resultados da pipeline 
geomtrica da funo  fixada ( ou  vice-versa)?
No. Voc tem que escolher uma ou outra. Se voc estiver usando uma vrtice 
shader customizada, ento voc  responsvel  pela realizao da transformao 
inteira da vrtice. 
Posso usar uma vrtice shader customizada se meu hardware no  a suporta?
Sim. O engine do software de processamento de vrtice do  Direct3D suporta 
completamente as vrtices shaders customizadas com um surpreendente alto nvel 
de performance. 
Como eu determino se o hardware suporta a minha vrtice shader customizada?
Os dispositivos capazes de suportar  vrtices shaders no hardware so exigidos 
para preencher o campo do D3DCAPS8::VertexShaderVersion  para indicar  o nvel 
da verso da vrtice shader que eles suportam. Qualquer dispositivo  de diz que 
suporta um nvel particular de vrtice shader deve apoiar todos os vrtices 
shaders legais que encontra a especificao pra aquele nvel ou abaixo. 
Quantos registros constantes esto disponveis para as vrtices shaders?
Os dispositivos  que apiam as vrtices shaders DX8 so exigidos para suportar 
um mnimo de 96 registros constantes. Os dispositivos podem suportar mais que 
este nmero mnimo, e pode relatar isto atravs do campo  
D3DCAPS8::MaxVertexShaderConst .
Posso dividir dados de posio entre vrtices com diferentes  coordenadas de 
textura?
O exemplo comum desta situao   um cubo  na qual  voc  quer usar uma textura 
diferente para cada face. Infelizmente a resposta  no, no  possvel 
atualmente para indexar  os componentes  de vrtices independentemente. Mesmo 
com vrtices stream mltiplos, todos os streams so indexados juntos. 
Quando eu submeto uma lista  indexada de primitivos, o  Direct3D processa todas 
as vrtices no buffer, ou apenas aquelas que indexei?
Quando usar a pipeline do software geomtrico, o Direct3D primeiro transforma 
todas as vrtices dentro do alcance que voc submeteu, ao invs de 
transforma-las de acordo com a exigncia conforme elas so indexadas. Para 
dados densamente compactados( isto  , onde a maioria das vrtices so usadas) 
isto  mais eficiente, particularmente  quando as instrues SIMD estiverem 
disponveis. Se seus dados estiverem espaadamente compactados (isto , muitos 
vrtices no so usados) ento voc pode querer considerar um rearranjo dos seus 
dados para evitar transformaes redundantes demais. Quando usar  a acelerao 
do hardware geomtrico, as vrtices so tipicamente transformados  conforme a 
exigncia em que so pedidos. 
O que  um buffer index ?
Um buffer index  exatamente anlogo ao um buffer de vrtice, mas ao invs disto 
ele contm ndices para usar no DrawIndexedPrimitive que chama.  altamente 
recomendada que voc use buffers index ao invs de memria de aplicao alocada 
natural quando possvel, pelas mesmas razes.
Eu percebo que os ndices de 32-bit  so agora do tipo suporte; posso us-los em 
todos os dispositivos?
No. Voc deve conferir o campo D3DCAPS8::MaxVertexIndex para determinar o 
mximo valor index que  apoiado pelo dispositivo. Este valor deve ser maior que 
 216-1 (0xffff) na ordem para os buffers index do tipo D3DFMT_INDEX32 serem 
apoiados. Alm disto, observe que alguns dispositivos podem apoiar ndices de  
32-bit mas apia um valor mximo de index  menor que  232-1 (0xffffffff); neste 
caso a aplicao deve respeitar o limite relatado pelo dispositivo. 
Quais restries existem no uso de  vrtices stream mltiplos com a pipeline de 
funo fixa?
A pipeline de funo fixa exige que cada vrtice stream seja um subconjunto de 
FVF restrito, ordenado como por uma declarao completa FVF . Tambm. Observe 
que voc deve respeitar qualquer restrio no nmero de streams conforme 
relatado pelo campo  D3DCAPS8::MaxStreams   (muitos dispositivos e/ou drivers 
atuais somente suportam um nico  stream).
Sintonizao de Performance
Como posso melhorar a performance do meu aplicativo  Direct3D ?
Os seguintes so reas chaves para olhar quando otimizar a performance: 
  Tamanho do grupo(batch). O Direct3D  otimizado para grandes grupos de 
  primitivos. Quanto mais polgonos que possam ser vistos em uma nica chamada, 
  melhor. Uma boa regra de thumb  direcionar  para uma mdia de 100 polgonos  
  por chamada. Abaixo deste nvel voc provavelmente no conseguir uma 
  performance boa, acima disto e voc vai estar diminuindo os retornos e 
  conflitos em potencial com consideraes concorrentes. (veja abaixo). 
  Mudanas de estado. Modificar o estado render pode ser uma operao cara, 
  particularmente quando  modificar a textura. Por esta razo,  importante 
  minimizar tanto quanto possvel o nmero de mudanas de estado feitas por 
  quadro. Tente tambm, minimizar as  mudanas de vrtice ou buffer index.  
Observao:    Mudana no buffer de vrtice no  mais to caro no  DirectX 8  
como era com as verses anteriores, mas  ainda  bom praticar para evitar 
mudanas no  buffer de vrtice onde possvel .
  Concorrncia. Se voc puder arranjar para realizar a renderizao 
  concorrentemente com outro processo, ento voc estar tirando grandes 
  vantagens da performance do sistema. Este objetivo pode  entrar em conflito 
  com o objetivo de reduzir o estado das mudanas e empurrar os dados para fora 
  do driver antes de ajudar a alcanar a concorrncia. Usando buffers de 
  vrtices mltiplos na forma arredondada voadora(round-robin) possa ajudar com 
  a concorrncia. 
  Sobrecarga de textura. Sobrecarregar textura para o dispositivo consumir a 
  banda larga e causar competio com os dados de vrtice. Entretanto,  
  importante no  comprometer a memria de textura, que foraria que o seu 
  esquema de desconto para sobrecarregar quantidades excessivas de textura em 
  cada quadro. 
  Buffers de vrtices e index . Voc deve sempre usar buffers de vrtices e  
  index , ao invs de blocos planos de aplicao em memria alocada. No mnimo, 
  a semntica de trancamento para buffers de vrtices e index pode evitar uma 
  operao redundante de cpia. Com alguns drivers, o buffer de vrtice ou  
  index pode ser lugares em memria mais otimizada ( talvez no vdeo ou memria  
  AGP) para acessar pelo  hardware. 
  Blocos de estado macro. Estes foram introduzidos no  DX 7.0, e fornecem um 
  mecanismo para gravar uma srie de mudanas de estado ( incluindo mudanas de 
  iluminao, material e matriz) dentro de um macro, que podem ento ser 
  recolocados por uma nica chamada. Isto tem duas vantagens: 
    Voc reduz a chamada  elevado ao  fazer uma chamada em vez de muitas. 
     Um driver  compatvel pode pr-parse e pr-compilar  as mudanas de estado, 
    tornando-o muito mais rpido para submeter-se aos grficos do hardware. 
Mudanas de estado podem ainda ser caras, mas ao usar estados macros pode-se 
ajudar a  reduzir ao menos um pouco do custo. 
  Use somente um nico dispositivo Direct3D  Se voc precisar renderizar 
  mltiplos alvos, use SetRenderTarget. Se voc estiver criando uma aplicao 
  com janelas com janelas mltiplas 3D, use a API  CreateAdditionalSwapChain . O 
  tempo de funcionamento  otimizado por um nico dispositivo e h uma 
  penalidade de velocidade considervel por usar dispositivos mltiplos.  
Quais tipos primitivos(strips, fans, listas e outros) devo usar?
Muitas misturas encontram-se em vrtices de caractersticas de dados reais que 
so divididos por polgonos mltiplos. Para maximizar a performance  desejvel 
reduzir a duplicao em vrtices transformados e enviar pelo bus para o 
dispositivo de renderizao.  claro que usar listas de tringulos simples no 
alcana nenhuma diviso de vrtices, tornando-o ao menos um mtodo otimizado. A 
escolha est ento entre usar strips(tiras) e  fans(leques),que implica em uma 
relao de conectividade especfica entre polgonos, e usar listas indexadas. 
Onde os dados naturalmente caem dentro das strips e fans, estas so as mais 
apropriadas escolhas, desde que elas minimizem os dados enviados para o driver. 
Contudo, decompor misturas em strips e fans com freqncia resulta em um grande 
nmero de peas separadas, implicando em um grande nmero de chamadas do 
DrawPrimitive. Por esta razo, o mtodo mais eficiente  geralmente o de usar 
uma nica chamada  DrawIndexedPrimitive  com uma lista de tringulo. Uma 
vantagem adicional de usar uma lista indexada  que um benefcio pode ser ganho 
mesmo quando tringulos consecutivos somente dividem um nico vrtice. Em 
resumo, se seus dados naturalmente caem  dentro das grandes strips e fans , use 
strips ou fans; por outro lado use listas indexadas. 
Qual   um padro de uso bom para buffers de vrtices se estou gerando dados 
dinmicos? 
  Cria um buffer vrtice usando  as flags de uso  D3DUSAGE_DYNAMIC e 
  D3DUSAGE_WRITEONLY , e a flag de fuso  D3DPOOL_DEFAULT  (Tambm especifique  
  D3DUSAGE_SOFTWAREPROCESSING se voc estiver usando o software de processamento 
  de vrtices) 
  I = 0. 
  Posicione o estado (texturas, estados de render e outros). 
  Confira se houver espaos no  buffer, isto , I + M <= N? (onde M  o nmero 
  de vrtices novos). 
  Se sim, ento tranque o  VB com  D3DLOCK_NOOVERWRITE. Isto diz ao Direct3D  e 
  ao driver que voc estar adicionando vrtices e no estar modificando 
  aqueles que voc agrupou previamente. Portanto, se uma operao DMA estava em 
  progresso, no  interrompida. Se no v para 11. 
  Preencha nos vrtices M em  I. 
  Destranque. 
  Chame Draw[Indexed]Primitive. Para primitivas no indexadas use I como o 
  parmetro StartVertex. Para primitivas indexadas, assegure-se que os ndices 
  apontam para a posio correta do buffer de vrtice( pode ser mais fcil usar 
  o parmetro  BaseVertexIndex da chamada SetIndicespara alcanar isto). 
  I += M. 
  V para 3. 
  Ok,  ento estamos sem espao, ento nos deixe comear com um novo VB. No 
  queremos usar o mesmo orque pode haver uma operao DMA em progresso. 
  Comunicamos isto para o  Direct3D e o driver ao destrancar o mesmo VB com  a 
  flag D3DLOCK_DISCARD. O que isto significa   voc pode  me dar um novo 
  ponteiro porque sou feito com aquele velho e no me importo com os contedos 
  do velho mais." 
  I = 0. 
  V para o 4 (ou 6). 
Biblioteca Utilitria do Direct3DX 
Quais os formatos de arquivos que so suportados pelas funes de carregamento 
do arquivo de imagens do  D3DX ?
As funes de carregamento do arquivo de imagens do  D3DX  suportam arquivos 
BMP, TGA, PNG, JPG, DIB, PPM, e DDS.
As funes de renderizao de texto em  D3DX no parecem funcionar, o que estou 
fazendo de errado?
Um erro comum quando usamos as funes do ID3DXFont::DrawText   especificar um 
componente alfa zero para o parmetro de cor; resultando em texto com 
transparncia completa ( isto  , invisvel). Para um texto completamente opaco, 
assegure-se que o componente alfa do parmetro cor esteja completamente saturado 
(255).
Devo usar a classe CD3Dfont  do framework do ID3DXFont ou do  SDK para 
renderizao da fonte?
A classe ID3DXFont   capaz de manuseio kerning e fontes internacionais 
complexas porque usa a GDI para desenhar o string.( linha, fio). Pode , 
entretanto, ser um pouco lenta j que necessita chamar o GDI toda vez. 
O CD3DFont   projetado para velocidade e usa primitivas texturizadas para 
desenhar os caracteres. Pode somente manusear fontes simples e no suporta a 
ordem completa de opes de formatao disponveis no ID3DXFont, mas  til pela 
rpida facilidade que mostra tal como contadores de frames(quadros) e outros. 
Para a produo do cdigo, voc pode querer implementar a sua prpria fonte de 
renderizao usando as primitivas de textura e/ou um GDI baseado no esquema com  
cashing( depsito) para evitar o redesenho. 
DirectSound
Porque acontece uma exploso esttica quando meu aplicativo inicializa? Percebo 
este problema com outras aplicativo tambm . 
Voc provavelmente instalou o tempo de funcionamento(runtime) de debug do  
DirectX . A verso  debug  do runtime preenche buffers com esttica a fim de 
ajudar os desenvolvedores a pegar os bugs com buffers no inicializados. Voc 
no pode garantir que os contedos de um buffer DirectSound  depois da criao, 
em particular, voc no pode presumir que um buffer que seja livre de zeros. 
DirectPlay
Como posso assegurar que meu jogo funcionar adequadamente com setups de Network 
Address Translators (NATs) e Internet Connection Sharing (ICS)?
NATs e ICS so tpicos complexos que so cobertos em maiores detalhes em um  
artigo separado no MSDN. Contudo, as seguintes dicas so boas linhas guias em 
geral: 
  Use um cliente-servidor, no topologia de network par-par, usando as 
  interfaces IDirectPlay8Client e IDirectPlay8Server . 
  Hospede servidores na Internet limpa, no por trs de NAT. 
  Enumere a porta do jogo diretamente, sem usar  DPNSVR. 
  No armazene endereos IP ou nmeros de portas nas suas mensagens.  
Para assuntos com relao a jogos par-a-par, os servidores hospedeiros por trs 
de NATs, e conselhos especficos para ICS em vrios sistemas de operao 
Windows, v a documentao detalhada. 
Para que  DPNSVR?
DPNSVR  um servio  de envio para  enumerao exige que elimine-se problemas 
causados por conflitos entre usos de portas po aplicaes mltiplas DirectPlay. 
Usando  DPNSVR permite que o DirectPlay selecione a porta a usar 
automaticamente, enquanto permite aos clientes enumerar o seu jogo. Por default, 
o DirectPlay usar DPNSVR conforme isto geralmente fornece maior flexibilidade 
para aplicaes; contudo, voc pode desabilit-lo ao especificar a flag 
DPNSESSION_NODPNSVR quando voc criasssss a sua sesso. O uso do  DPNSVR pode 
causar algumas edies com NATs no lado do cliente, especificamente, se o 
cliente enumerar o anfitrio usando a porta  DPNSVR , e o anfitrio responde 
usando sua prpria porta que a NAT pode negar enviando um pacote para o cliente 
porque ela no veio da mesma porta que o pedido foi enviado. 
Porque o  IDirectPlay8LobbyClient::Initialize retorna DPNERR_NOTALLOWED?
O DirectPlay no permite mais que um cliente lobby ou aplicao por processo e  
tentiva de criar clientes mltiplos causaro que este erro  seja retornado. 


      Traduo:Geovana Golin  
       2000-2001 - Copyright Informaster Software
      Todos direitos reservados
      Ufa!

